//package org.jeecg.modules.monitoringindicators.app.controller;
//
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import lombok.extern.slf4j.Slf4j;
//import org.jeecg.common.api.vo.Result;
//import org.jeecg.common.constant.CommonConstant;
//import org.jeecg.common.system.api.ISysBaseAPI;
//import org.jeecg.common.system.util.JwtUtil;
//import org.jeecg.common.system.vo.LoginUser;
//import org.jeecg.common.util.PasswordUtil;
//import org.jeecg.common.util.RedisUtil;
//import org.jeecg.common.util.oConvertUtils;
//import org.jeecg.modules.base.service.BaseCommonService;
//import org.jeecg.modules.system.entity.SysDepart;
//import org.jeecg.modules.system.entity.SysTenant;
//import org.jeecg.modules.system.entity.SysUser;
//import org.jeecg.modules.system.model.SysLoginModel;
//import org.jeecg.modules.system.service.*;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
///**
// * @author Wenjl
// * @date 2022/01/25
// * app端身份验证接口
// */
//@RestController
//@RequestMapping("/app/sys")
//@Api(tags = "用户登录")
//@Slf4j
//public class AppAuthController {
//    @Autowired
//    private ISysUserService sysUserService;
//    @Autowired
//    private ISysBaseAPI sysBaseAPI;
//    @Autowired
//    private ISysLogService logService;
//    @Autowired
//    private RedisUtil redisUtil;
//    @Autowired
//    private ISysDepartService sysDepartService;
//    @Autowired
//    private ISysTenantService sysTenantService;
//    @Autowired
//    private ISysDictService sysDictService;
//    @Resource
//    private BaseCommonService baseCommonService;
//
//    private static final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890";
//
//    @ApiOperation("登录接口")
//    @RequestMapping(value = "/login", method = RequestMethod.POST)
//    public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
//        Result<JSONObject> result = new Result<JSONObject>();
//        String username = sysLoginModel.getUsername();
//        String password = sysLoginModel.getPassword();
//        //update-begin--Author:scott  Date:20190805 for：暂时注释掉密码加密逻辑，有点问题
//        //前端密码加密，后端进行密码解密
//        //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密
//        //update-begin--Author:scott  Date:20190805 for：暂时注释掉密码加密逻辑，有点问题
//
//        //update-begin-author:taoyan date:20190828 for:校验验证码
//
//        //update-end-author:taoyan date:20190828 for:校验验证码
//
//        //1. 校验用户是否有效
//        //update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug，if条件永远为false
//        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(SysUser::getUsername, username);
//        SysUser sysUser = sysUserService.getOne(queryWrapper);
//        //update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug，if条件永远为false
//        result = sysUserService.checkUserIsEffective(sysUser);
//        if (!result.isSuccess()) {
//            return result;
//        }
//
//        //2. 校验用户名或密码是否正确
//        String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
//        String syspassword = sysUser.getPassword();
//        if (!syspassword.equals(userpassword)) {
//            result.error500("用户名或密码错误");
//            return result;
//        }
//
//        //用户登录信息
//        userInfo(sysUser, result);
//        //update-begin--Author:liusq  Date:20210126  for：登录成功，删除redis中的验证码
//
//        //update-begin--Author:liusq  Date:20210126  for：登录成功，删除redis中的验证码
//        LoginUser loginUser = new LoginUser();
//        BeanUtils.copyProperties(sysUser, loginUser);
//        baseCommonService.addLog("用户名: " + username + ",登录成功！", CommonConstant.LOG_TYPE_1, null, loginUser);
//        //update-end--Author:wangshuai  Date:20200714  for：登录日志没有记录人员
//        return result;
//    }
//
//    /**
//     * 用户信息
//     *
//     * @param sysUser
//     * @param result
//     * @return
//     */
//    private Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) {
//        String syspassword = sysUser.getPassword();
//        String username = sysUser.getUsername();
//        // 获取用户部门信息
//        JSONObject obj = new JSONObject();
//        List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
//        obj.put("departs", departs);
//        if (departs == null || departs.size() == 0) {
//            obj.put("multi_depart", 0);
//        } else if (departs.size() == 1) {
//            sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
//            obj.put("multi_depart", 1);
//        } else {
//            //查询当前是否有登录部门
//            // update-begin--Author:wangshuai Date:20200805 for：如果用戶为选择部门，数据库为存在上一次登录部门，则取一条存进去
//            SysUser sysUserById = sysUserService.getById(sysUser.getId());
//            if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) {
//                sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
//            }
//            // update-end--Author:wangshuai Date:20200805 for：如果用戶为选择部门，数据库为存在上一次登录部门，则取一条存进去
//            obj.put("multi_depart", 2);
//        }
//        // update-begin--Author:sunjianlei Date:20210802 for：获取用户租户信息
//        String tenantIds = sysUser.getRelTenantIds();
//        if (oConvertUtils.isNotEmpty(tenantIds)) {
//            List<Integer> tenantIdList = new ArrayList<>();
//            // 该方法仅查询有效的租户，如果返回0个就说明所有的租户均无效。
//            List<SysTenant> tenantList = sysTenantService.queryEffectiveTenant(tenantIdList);
//            if (tenantList.size() == 0) {
//                result.error500("与该用户关联的租户均已被冻结，无法登录！");
//                return result;
//            } else {
//                obj.put("tenantList", tenantList);
//            }
//        }
//        // update-end--Author:sunjianlei Date:20210802 for：获取用户租户信息
//        // 生成token
//        String token = JwtUtil.sign(username, syspassword);
//        // 设置token缓存有效时间
//        redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
//        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.APP_EXPIRE_TIME * 2 / 1000);
//        obj.put("token", token);
//        obj.put("userInfo", sysUser);
//        obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
//        result.setResult(obj);
//        result.success("登录成功");
//        return result;
//    }
//}
